package project.configuration.directors;


import project.configuration.instructions.CreateTruckAgentInstruction;
import project.configuration.instructions.CreateTruckInstruction;
import project.layer.physical.Crossroad;
import project.layer.physical.Road;
import project.layer.physical.Truck;
import project.testenvironment.TestingParameters;
import project.utils.DelayedTimePattern;

import framework.core.VirtualClock;
import framework.initialization.InitializationDirector;
import framework.instructions.creation.CreateCommunicationCapabilityInstruction;
import framework.instructions.creation.CreateDeviceInstruction;
import framework.instructions.creation.CreateStorageCapabilityInstruction;
import framework.instructions.deployment.DeployAgentInstruction;
import framework.instructions.deployment.DeployConnectionEntityInstruction;
import framework.instructions.deployment.DeployDeviceInstruction;
import framework.layer.agent.Agent;
import framework.layer.deployment.communication.CommunicationCapability;
import framework.layer.deployment.devices.Device;
import framework.layer.deployment.storage.StorageCapability;
import framework.layer.physical.PhysicalConnectionStructure;
import framework.layer.physical.entities.PhysicalEntity;
import framework.utils.IdGenerator;
import framework.utils.Utils;

/**
 * populates the PHYSICAL layer with vehicles
 * 
 * @author marioct
 *
 */
public class TestVehiclesInitializationDirector extends InitializationDirector<PhysicalConnectionStructure<Truck, Crossroad, Road>> {

	public TestVehiclesInitializationDirector() {
		super(new DelayedTimePattern(Utils.minutesToMicroSeconds(4)));
	}


	@Override
	protected void createAndDeploy() {
		long currentTime = VirtualClock.currentTime();
		
			int id1 = nodesExternalIds[10];
			Crossroad cr1 = getInstructionManager().findSpecificObject(Crossroad.class, id1);
			createAndDeployTruck(currentTime, Utils.fromKmHToMmMicroSec(TestingParameters.TRUCK_SPEED), cr1);
			
			int id2 = nodesExternalIds[88];
			Crossroad cr2 = getInstructionManager().findSpecificObject(Crossroad.class, id2);
			createAndDeployTruck(currentTime, Utils.fromKmHToMmMicroSec(TestingParameters.TRUCK_SPEED), cr2);
			

			int id3 = nodesExternalIds[1250];
			Crossroad cr3 = getInstructionManager().findSpecificObject(Crossroad.class, id3);
			createAndDeployTruck(currentTime, Utils.fromKmHToMmMicroSec(TestingParameters.TRUCK_SPEED), cr3);
			

			int id4 = nodesExternalIds[1111];
			Crossroad cr4 = getInstructionManager().findSpecificObject(Crossroad.class, id4);
			createAndDeployTruck(currentTime, Utils.fromKmHToMmMicroSec(TestingParameters.TRUCK_SPEED), cr4);
			
			int id5 = nodesExternalIds[71];
			Crossroad cr5 = getInstructionManager().findSpecificObject(Crossroad.class, id5);
			createAndDeployTruck(currentTime, Utils.fromKmHToMmMicroSec(TestingParameters.TRUCK_SPEED), cr5);

//			
//			int id6 = nodesExternalIds[82];
//			Crossroad cr6 = getInstructionManager().findSpecificObject(Crossroad.class, id6);
//			createAndDeployTruck(currentTime, Utils.fromKmHToMmMicroSec(TestingParameters.TRUCK_SPEED), cr6);
//			
//			int id7 = nodesExternalIds[92];
//			Crossroad cr7 = getInstructionManager().findSpecificObject(Crossroad.class, id7);
//			createAndDeployTruck(currentTime, Utils.fromKmHToMmMicroSec(TestingParameters.TRUCK_SPEED), cr7);
//			
//			int id8 = nodesExternalIds[84];
//			Crossroad cr8 = getInstructionManager().findSpecificObject(Crossroad.class, id8);
//			createAndDeployTruck(currentTime, Utils.fromKmHToMmMicroSec(TestingParameters.TRUCK_SPEED), cr8);
//			int id9 = nodesExternalIds[54];
//			Crossroad cr9 = getInstructionManager().findSpecificObject(Crossroad.class, id9);
//			createAndDeployTruck(currentTime, Utils.fromKmHToMmMicroSec(TestingParameters.TRUCK_SPEED), cr9);
//			int id10 = nodesExternalIds[76];
//			Crossroad cr10 = getInstructionManager().findSpecificObject(Crossroad.class, id10);
//			createAndDeployTruck(currentTime, Utils.fromKmHToMmMicroSec(TestingParameters.TRUCK_SPEED), cr10);

	}
	
	private void createAndDeployTruck(long executiontime, double speed, Crossroad cr){
		int truckId = IdGenerator.getIdGenerator().getNextId(PhysicalEntity.class);
		int communicationId = IdGenerator.getIdGenerator().getNextId(CommunicationCapability.class);
		int storageId = IdGenerator.getIdGenerator().getNextId(StorageCapability.class);
		int deviceId = IdGenerator.getIdGenerator().getNextId(Device.class);
		int truckAgentId = IdGenerator.getIdGenerator().getNextId(Agent.class);
				
		getInstructionManager().addInstruction(new CreateTruckInstruction(executiontime, truckId, speed));
		getInstructionManager().addInstruction(new DeployConnectionEntityInstruction<Truck, Crossroad, Road>(executiontime, truckId, cr.getPosition().getX(), cr.getPosition().getY(),  true));
		getInstructionManager().addInstruction(new CreateCommunicationCapabilityInstruction(executiontime, communicationId, null));
		getInstructionManager().addInstruction(new CreateStorageCapabilityInstruction(executiontime,storageId, 100000));
		getInstructionManager().addInstruction(new CreateDeviceInstruction(executiontime, deviceId, communicationId, storageId));
		getInstructionManager().addInstruction(new DeployDeviceInstruction(executiontime, deviceId, truckId));

		getInstructionManager().addInstruction(new CreateTruckAgentInstruction(executiontime, truckAgentId));
		getInstructionManager().addInstruction(new DeployAgentInstruction(executiontime, truckAgentId, truckId));
	}

	private int[] nodesExternalIds = { 60225758, 34985418, 303386232,
			150428997, 303386235, 303386237, 303386238, 130148042, 303386228,
			72742201, 301633814, 103670018, 94610063, 180286173, 85817828,
			85817829, 34985312, 85817830, 85817831, 174879285, 174879287,
			94610082, 303386244, 303386242, 303386241, 303386240, 303386255,
			101145969, 175425809, 303386254, 175425808, 303386253, 101145971,
			60225547, 303386252, 101145970, 175425810, 101145972, 101145975,
			303386262, 303386256, 175425806, 303386257, 206223192, 147874389,
			147874388, 147874390, 147811498, 94610226, 60800925, 130148271,
			180130266, 34985031, 34985032, 130148223, 208179809, 34984967,
			34984969, 159669468, 34984970, 159669466, 299537061, 175514487,
			208179807, 175514488, 180130435, 130147528, 31344362, 31344361,
			130147477, 176520307, 130147392, 112440269, 26445085, 130147391,
			85817967, 85817968, 60800423, 165914768, 34985596, 249367353,
			148464514, 150429424, 148526824, 85818042, 60226351, 34985492,
			150337213, 34984322, 34984323, 34984320, 34984326, 34984327,
			34984324, 85818624, 34984325, 60226734, 60226735, 60226732,
			60226733, 60226737, 60226736, 206222281, 303634414, 180130992,
			303634429, 206222239, 206222212, 187282662, 60226612, 30251885,
			110484979, 34984319, 30251863, 30251862, 30251867, 30251865,
			30251864, 110484988, 30251695, 30251694, 30251693, 30251692,
			30251691, 103671006, 103671005, 118201564, 30251696, 101144776,
			118201588, 31412914, 31412919, 31412920, 118201582, 30251758,
			30251746, 31412941, 30251749, 30251748, 83794651, 159652925,
			16483780, 16483781, 16483782, 16483778, 16483788, 16483789,
			16483790, 16483784, 16483786, 16483799, 16483798, 16483793,
			16483792, 16483795, 16483794, 16483805, 16483807, 16483806,
			16483801, 16483800, 176520114, 16483812, 16483813, 16483811,
			16483808, 16483809, 16483822, 16483821, 16483816, 16483817,
			187282864, 187282862, 16483828, 16483826, 187282859, 16483839,
			16483838, 16483837, 187282852, 16483835, 16483833, 101145546,
			16483868, 148500441, 16483866, 60227200, 16483867, 60227201,
			16483864, 16483865, 305451149, 16483862, 305451148, 16483863,
			160567870, 305451151, 16483860, 16483861, 305451145, 16483858,
			16483859, 305451147, 16483856, 305451146, 16483857, 16483855,
			16483854, 16483853, 16483852, 305451152, 16483851, 16483849,
			16483848, 203226267, 16483847, 16483846, 16483845, 16483844,
			16483843, 16483842, 187282978, 94118032, 148465175, 223998735,
			94118025, 223998736, 223998740, 98262395, 150458891, 148465361,
			61735832, 76674924, 175674041, 30251319, 30251318, 61735829,
			30251323, 61735830, 31412500, 61735831, 31412501, 61735825,
			61735826, 61735827, 61735809, 76674846, 160507846, 60227199,
			31412415, 249398860, 76674763, 76674804, 110484994, 31412458,
			31412459, 80579658, 160258204, 31412416, 85801609, 85801610,
			31343561, 175674234, 120194808, 148465637, 299537584, 85801519,
			85801518, 85801516, 85801515, 85801520, 94612102, 94612099,
			21056326, 21056327, 21056324, 21056325, 21056361, 21056363,
			21056364, 21056366, 21056367, 21056355, 21056356, 21056358,
			21056359, 21056369, 87913344, 94013702, 94013700, 94013698,
			94013697, 94013696, 20841990, 87913325, 87913324, 87913338,
			87913339, 87913336, 87913337, 87913343, 87913340, 87913341,
			87913334, 87913335, 87913332, 87913333, 275339781, 20911281,
			20926576, 20926577, 318808581, 20911283, 20911282, 20911285,
			20911284, 20911272, 20926569, 20911273, 20926568, 20926570,
			20911276, 20926572, 20926575, 20926574, 101143556, 20911266,
			20911267, 20911268, 20911270, 20926567, 20926566, 101091892,
			21178596, 85800084, 116116043, 94013694, 94013693, 94013692,
			27220626, 206225130, 19887056, 19887057, 19887053, 19887052,
			19887054, 19887051, 60767630, 281487716, 281487715, 281487712,
			20912052, 20912051, 20912050, 20912049, 281487711, 150287680,
			85816199, 147875955, 27220247, 303751609, 488559959, 312549587,
			20841966, 20841967, 20841964, 20841965, 20841963, 20841961,
			176518600, 249602536, 249602537, 249602532, 249602533, 19501820,
			19501821, 19501813, 19501814, 19501811, 85800623, 27220186,
			27220180, 27220177, 27220179, 27220178, 83792924, 110504562,
			110504565, 110504552, 126673884, 159701080, 182563187, 182563184,
			159701083, 116117391, 20910543, 182563195, 182563192, 20910549,
			182563175, 20910548, 20910551, 20910550, 20910545, 182563171,
			20910544, 20910547, 20910546, 182563168, 20910553, 182563179,
			20910552, 20910554, 182563165, 182563160, 176467193, 94014832,
			20910523, 20910522, 203237417, 94014831, 83792739, 83792738,
			83792742, 83792740, 83792747, 83792746, 83792745, 83792749,
			241148725, 175797005, 103673273, 159666381, 449118060, 175517542,
			150286916, 103672854, 103672853, 249603972, 175517481, 175517475,
			175517478, 175517479, 175517476, 120189958, 126674381, 116117053,
			116117054, 275341056, 162979479, 60224977, 116117059, 116117056,
			229670176, 83792428, 83792425, 83792424, 83792427, 150503348,
			60766650, 60225091, 60225093, 60225092, 60225094, 16424233,
			16424227, 89190595, 16424230, 16424228, 89190616, 177593015,
			177593013, 89190635, 227260159, 60225177, 60225178, 16424219,
			16424220, 89190654, 60225155, 289359357, 20910885, 20910884,
			20910883, 20910882, 20910881, 20910880, 89190559, 89190576,
			85799543, 120196861, 120196851, 17887694, 229653287, 229653283,
			94612914, 89190678, 94612915, 94612912, 94612913, 94612916,
			94612917, 148436259, 94612907, 94612906, 89190669, 94612911,
			94612910, 94612909, 20910724, 20910725, 20910722, 20910723,
			450870827, 249231183, 249231177, 147890362, 235418416, 282882046,
			60225505, 282882047, 282882044, 282882045, 282882042, 282882043,
			282882040, 20910640, 85799609, 20910637, 20910636, 20910639,
			20910638, 20910633, 20910632, 20910635, 235418409, 20910628,
			20910630, 148502670, 101141700, 159696351, 60516976, 148433861,
			179425214, 231953028, 179425209, 231953030, 179425184, 488558423,
			16933634, 86563769, 235416632, 148522291, 148522292, 16933618,
			148522293, 16933617, 16933616, 16933610, 16933608, 16933609,
			16933606, 16933607, 16933602, 16933603, 16933593, 16933592,
			16933595, 16933594, 16933589, 16933588, 16933591, 16933590,
			16933585, 16933587, 16933586, 16933580, 79543824, 16933583,
			16933576, 16933577, 16933573, 16933574, 16933575, 203221722,
			158850182, 176562078, 378242008, 302417371, 175518226, 175518224,
			158850151, 175518225, 175518230, 175518231, 175518228, 175518229,
			569761623, 569761620, 569761625, 19499499, 84897016, 19499497,
			19499502, 282882072, 19499501, 282882070, 282882071, 84897008,
			282882069, 282882066, 282882067, 282882064, 84897012, 282882065,
			282882063, 282882062, 84897000, 282882061, 282882060, 116138772,
			84896997, 19499521, 101142166, 85798581, 302417454, 85813819,
			85813823, 85813822, 85813820, 31348552, 61296800, 61296801,
			61296791, 61296789, 61296788, 61296787, 61296786, 61296785,
			61296798, 61296797, 61296795, 61296794, 61296792, 61296783,
			301630194, 301630193, 31348485, 60516570, 17886258, 160409329,
			129273480, 160409318, 160409315, 179563032, 160409312, 160409327,
			179563031, 160409322, 160409301, 160409297, 176591963, 160409307,
			175795563, 16734143, 31348294, 98287760, 339599889, 339599891,
			227118176, 339599887, 129273454, 94544884, 31348271, 320990027,
			173437263, 173437260, 173437266, 85797012, 148505634, 81127570,
			81127571, 60518083, 86564812, 235415989, 86564811, 16648080,
			16648081, 16648082, 16648084, 16648086, 16648087, 16648075,
			16648077, 16648076, 16648078, 248189087, 101140953, 174822998,
			213199659, 148434565, 180126809, 79560212, 137011601, 84789010,
			84789005, 137011599, 159664562, 137011598, 256703177, 256703176,
			256703178, 256703173, 256703175, 256703174, 256703185, 60517401,
			148434363, 148434365, 148434366, 101141094, 190723817, 190723822,
			190723820, 190723814, 138229194, 83790049, 85797377, 85797378,
			378242054, 481089527, 481089532, 108428687, 108428680, 231953771,
			103644774, 249348325, 60517688, 78503862, 78503859, 157237453,
			16387325, 173334004, 173333994, 16387310, 160581260, 174893332,
			148451850, 101141353, 85815217, 85815218, 85815219, 85815220,
			85815221, 174822558, 179423389, 179423399, 175228084, 72740055,
			481089592, 21091233, 249439336, 249439343, 249439335, 249439345,
			120184958, 203219887, 116140733, 116140732, 116140734, 138230601,
			130136750, 130136758, 130136754, 18255069, 99974666, 99974667,
			99974665, 99974669, 99974660, 16526544, 16526539, 16526538,
			16526536, 16526543, 16526542, 180284078, 16526541, 16526540,
			180284079, 16526531, 16526530, 157240858, 16526535, 16526534,
			16526532, 160226603, 158848232, 158848235, 158848229, 455498590,
			455498588, 455498584, 224708194, 455498585, 455498592, 455498595,
			16642520, 16642516, 16642517, 16642519, 16642543, 16642541,
			16642540, 16642538, 16642537, 16642536, 60702618, 16642535,
			16642534, 60702616, 16642533, 60702617, 16642555, 16642552,
			16642553, 16642550, 16642551, 16642548, 16642549, 16642546,
			16642547, 81109623, 81109622, 81109621, 81109620, 20975560,
			18236047, 18236052, 18236053, 18236054, 18236049, 18236051,
			103661133, 180283750, 180283749, 289346573, 289346572, 99974643,
			99974653, 300009826, 20958054, 148455399, 61298799, 249700071,
			249700070, 61298800, 240873938, 60702550, 224007721, 148501216,
			302683830, 302683837, 302683832, 302683833, 302683834, 148430922,
			302683869, 302683843, 302683842, 302683841, 302683840, 302683847,
			302683846, 302683845, 302683844, 302683850, 302683849, 302683848,
			302683852, 109830069, 19866699, 148501455, 417522609, 301632696,
			301632702, 417522601, 417522603, 417522607, 417522599, 301632711,
			301632705, 18236463, 61758630, 147812510, 61758631, 61758632,
			61758633, 203220959, 79439989, 180285096, 180285097, 180285098,
			180285099, 16401060, 16401062, 180284929, 130103261, 18236729,
			18236728, 18236731, 18236730, 18236733, 18236732, 18236734,
			18236727, 227335591, 148501901, 481099828, 86562274, 61758993,
			147812909, 61758991, 249438955, 148502217, 60701543, 17324593,
			60701544, 60701545, 60701546, 180249748, 203220417, 249438907,
			249438906, 249438905, 249438904, 79563865, 130137323, 130137330,
			180267221, 180267220, 180267219, 180267216, 19865709, 19865708,
			19865705, 19865707, 19865706, 19865701, 19865703, 19865702,
			72739705, 72739708, 110494586, 345265026, 345265024, 110494577,
			110494582, 306640855, 345265041, 345265045, 110494572, 110494562,
			110494567, 110494555, 110494556, 345265111, 345265106, 345265118,
			345265115, 147885547, 85794709, 85794708, 85794707, 85794706,
			61760395, 61760394, 61760399, 61760398, 61760397, 61760396,
			179558935, 231956951, 16571300, 16571301, 16571302, 16571296,
			80569538, 16571297, 16571298, 18490933, 18490934, 18490935,
			18490931, 18490941, 18490942, 94020361, 18490886, 94020360,
			19864763, 18490885, 19864760, 18490884, 94020362, 18490883,
			18490881, 18490880, 94020353, 18490894, 18490893, 94020354,
			94020357, 61760347, 18490891, 94020359, 61760345, 18490889,
			94020358, 18490888, 80726898, 16571294, 16571293, 16571292,
			18490898, 16571291, 18490896, 18490897, 16571281, 345264975,
			16571369, 159691493, 16571370, 16571371, 16571372, 16571375,
			345264991, 16571387, 16571389, 16571388, 16571391, 61760295,
			16571390, 16571376, 16571379, 345264981, 16571378, 61760299,
			16571380, 16571382, 18490946, 18490945, 18490944, 345265000,
			18490949, 345265003, 345264996, 18490955, 18490952, 18490959,
			173495772, 18490958, 16571335, 18490957, 18490956, 173495775,
			110494596, 345265021, 18490962, 16571355, 18490963, 18490960,
			16571353, 16571352, 110494592, 16571359, 345265016, 16571357,
			16571356, 345265013, 18490968, 16571345, 18490974, 16571351,
			345265008, 16571350, 27226294, 103662279, 103662278, 94020349,
			94020351, 94020350, 27226307, 157268112, 160229058, 160229062,
			27226213, 27226212, 27226214, 116121825, 413525026, 78305235,
			362750504, 362750468, 160229052, 16737674, 16737675, 16737672,
			16737673, 16737678, 16737679, 16737676, 16737677, 16737666,
			16737667, 16737664, 16737665, 16737670, 16737671, 385180809,
			16737669, 16737691, 16737690, 180247473, 16737693, 16737692,
			16737682, 16737685, 16737684, 60702867, 16737696, 16737701,
			16737702, 16737703, 84784902, 385180874, 247093154, 60458306,
			249596623, 148455668, 229693765, 16737637, 16737638, 148440189,
			16737645, 16737644, 16737647, 16737646, 16737643, 16737642,
			16737648, 60458458, 16737660, 16737661, 16737662, 16737657,
			16737658, 16737659, 60458025, 18490845, 18490844, 18490847,
			18490846, 18490841, 18490842, 18490879, 18490878, 18490877,
			18490876, 18490875, 18490873, 18490872, 18490871, 18490870,
			18490869, 18490868, 18490867, 18490865, 18490864, 18490862,
			18490863, 18490860, 18490859, 18490857, 18490854, 18490855,
			18490852, 18490850, 18490851, 18490848, 18490849, 81107052,
			224705286, 103661685, 60702979, 60702981, 60703074, 60703073,
			60703072, 299532223, 60227767, 203227883, 203227884, 60227784,
			213195137, 85824158, 85824156, 85824155, 116123075, 19863696,
			19863698, 19863700, 19863701, 19863702, 19863704, 148429949,
			19863705, 19863706, 19863707, 19863708, 282834610, 129250291,
			19863714, 159692670, 60457539, 393928245, 101138034, 159661753,
			231940255, 148430276, 60457520, 60457521, 60457522, 60457519,
			60457518, 120238022, 450876101, 60457721, 20938334, 20938335,
			299560991, 60457634, 18251119, 159691851, 18251134, 159691858,
			18251135, 18251132, 159691856, 18251130, 18251131, 18251129,
			18251126, 18251127, 18251124, 18251125, 18251122, 18251123,
			18251120, 18251121, 160499021, 450875718, 85823614, 85823615,
			85823616, 85823617, 203227222, 18251136, 18251137, 18251139,
			18251140, 18251141, 18251142, 148430462, 61760655, 203218890,
			94020758, 16571392, 16571394, 509217293, 509217289, 509217283,
			94540954, 173495018, 103662645, 60228395, 60228397, 60228396,
			251411581, 251411579, 251411574, 18233443, 18233445, 18233444,
			18233447, 18233446, 18233449, 18233448, 18233451, 18233453,
			18233452, 149031901, 393366433, 393366430, 455446787, 455446788,
			149031804, 455446789, 455446790, 240360502, 147883471, 203230877,
			203230875, 314016975, 314016973, 314016972, 112346297, 112346253,
			227250978, 181537735, 330978227, 330978224, 330978225, 330978222,
			112346268, 330978220, 112346270, 112346262, 108238381, 108238371,
			108238399, 108238360, 108238365, 83708947, 112346150, 243223370,
			112346146, 112346156, 243223388, 243223387, 112346163, 101082508,
			112346173, 101082510, 101082504, 101082507, 101082506, 108238415,
			108238409, 108238406, 243223392, 243223393, 108238402, 112346133,
			83709015, 112346142, 116109181, 85807538, 83709860, 83709862,
			85807544, 289351582, 289351583, 289351579, 19827839, 19827838,
			19827837, 19827836, 19827835, 19827834, 19827833, 19827832,
			19827831, 19827830, 19827829, 19827828, 19827827, 19827826,
			19827825, 19827824, 291464573, 289351588, 289351587, 19827841,
			19827840, 19827843, 19827842, 19827845, 19827844, 60460410,
			76685353, 157196633, 76685370, 83709586, 76685363, 60962256,
			60962257, 60962250, 86619218, 120234244, 157253454, 76685389,
			76685379, 60962198, 60962197, 60962165, 60962164, 60962166,
			21262656, 21262657, 21262658, 245929719, 245929718, 245929717,
			245929716, 245929720, 450176664, 450176667, 450176666, 21262655,
			21262654, 21262653, 203229732, 203229735, 31670602, 31670600,
			31670601, 116137306, 31670623, 31670622, 31670621, 224734843,
			160501582, 160501587, 120235763, 18232318, 18232317, 18232316,
			18232314, 18232313, 18232312, 18232310, 60459817, 31670399,
			31670398, 19861959, 19861958, 19861957, 19861954, 19861953,
			19861952, 19861961, 149032593, 289349866, 289349876, 289349877,
			289349879, 159694771, 19861946, 19861948, 19861949, 19861950,
			120182376, 449119179, 449119178, 449119176, 150434380, 240819077,
			148459356, 176562362, 148753864, 148753858, 148753861, 296938648,
			112346102, 147882781, 20918539, 20918538, 20918537, 20918536,
			99135158, 20918542, 20918541, 20918540, 20918531, 20918530,
			20918529, 20918528, 20918535, 20918554, 20918552, 20918553,
			20918558, 20918559, 20918556, 20918557, 20918544, 20918550,
			20918561, 20918560, 20918563, 20918562, 20918564, 20918584,
			20918585, 20918586, 20918588, 20918590, 20918591, 20918577,
			20918579, 20918580, 20918582, 20918583, 19792168, 19792169,
			20918606, 19792170, 20918605, 19792171, 19792172, 20918603,
			20918602, 20918601, 20918600, 19792160, 20918599, 20918598,
			19792162, 20918597, 19792163, 20918596, 19792164, 20918595,
			19792165, 20918594, 19792166, 20918593, 20918592, 180246442,
			103691651, 19792138, 19792136, 19792137, 19792142, 19792143,
			19792140, 19792141, 19792134, 19792135, 19792132, 19792154,
			227128015, 19792152, 227128010, 19792158, 19792157, 19792156,
			19792147, 19792145, 19792144, 19792151, 19792150, 19792149,
			19792148, 110490838, 110490847, 110490844, 19792121, 110490816,
			110490820, 110490829, 19792087, 190759378, 19792088, 19792089,
			19792090, 110490849, 110490854, 51379366, 190759363, 110490862,
			20918519, 20918518, 110490807, 20918515, 20918513, 20918512,
			110490813, 20918527, 20918526, 20918525, 20918524, 20918523,
			20918522, 20918521, 20918520, 19792001, 20918502, 19792000,
			19792003, 20918500, 20918501, 19792005, 19792004, 20918499,
			147869526, 19792006, 20918510, 18491699, 19792008, 20918508,
			20918509, 18491702, 20918507, 18491700, 20918504, 18491701,
			20918505, 19791999, 19791998, 19791997, 175225810, 175225812,
			101135392, 149033555, 159705087, 94678241, 25680705, 25680704,
			150433533, 25680702, 25680703, 176569411, 20917946, 20917947,
			20917944, 20917945, 60960663, 60960662, 319796325, 18635930,
			18635931, 18635929, 18635934, 18635935, 18635932, 252840602,
			252840601, 18635924, 18635925, 18635916, 18635906, 18635960,
			18635961, 18635962, 18635964, 18635965, 18635966, 18635955,
			18635956, 18635958, 18635959, 149033849, 18635944, 18635947,
			18635946, 149033850, 18635949, 18635948, 159656892, 157264356,
			18635943, 18635942, 74002995, 74002996, 18635992, 74002997,
			18635990, 18635991, 18635988, 18635986, 18635987, 18635984,
			18635985, 60462963, 18635982, 79586393, 180134587, 18635978,
			18635977, 180134585, 74002980, 18635976, 253568686, 18635972,
			253568687, 74002991, 18635971, 74002989, 147869849, 60462938,
			60462940, 393181897, 116147707, 60960435, 18635892, 18635895,
			18635894, 18635891, 18635890, 18635897, 18635896, 18635898,
			18635874, 18635884, 18635885, 18635886, 18635887, 18635882,
			224155105, 303381501, 303381503, 303381497, 303381499, 303381492,
			303381490, 60803869, 60803870, 75823229, 75823231, 224328066,
			159656075, 159656074, 150432829, 149033021, 149033020, 283457253,
			283457252, 259408673, 133350218, 60960234, 60960235, 60960236,
			296208713, 296208715, 133350225, 232916003, 232916001, 148459914,
			75823243, 148459917, 148459918, 75823235, 75823255, 148459920,
			133350164, 148459922, 148459925, 75823249, 61764064, 61764065,
			61764067, 61764063, 61764062, 61764061, 133350087, 133350093,
			296924355, 181417575, 159704227, 181417577, 150433140, 133350047,
			391550591, 391550586, 283457285, 108390283, 203232303, 208184113,
			94605978, 418010875, 296334381, 252977426, 296334382, 296334384,
			296334387, 112444032, 112444035, 148738741, 149034548, 103649905,
			148738749, 148738754, 148738752, 148738762, 148738760, 148738767,
			345261721, 157265133, 345261697, 345261698, 345261700, 345261702,
			373519386, 345261694, 345261695, 160232113, 103650045, 160232081,
			60804517, 373519538, 373519536, 373519537, 159703714, 80696932,
			289356100, 289356103, 74004071, 303381734, 303381738, 94677412,
			241146191, 303381747, 303381744, 303381748, 241146202, 303381518,
			303381514, 303381505, 303381504, 150432737, 61306296, 60479237,
			31355504, 31355500, 31355501, 31355502, 31355503, 31355496,
			31355497, 31355498, 31355499, 303381559, 31355495, 303381569,
			303381568, 303381571, 303381570, 303381572, 303381574, 31355450,
			60478644, 60478645, 60478640, 60478641, 60478643, 60478637,
			60478639, 60478638, 157219159, 139559319, 60478687, 139559314,
			139559309, 139559305, 139559306, 139559307, 31355269, 31355268,
			31355271, 31355270, 31355265, 31355264, 31355267, 31355266,
			31355276, 31355273, 31355272, 31355275, 31355274, 31355292,
			31355293, 31355294, 80592597, 80592592, 83710718, 80592606,
			80592582, 31355263, 80592576, 80592586, 176568932, 165927630,
			149034140, 165927627, 80592626, 60478527, 80592634, 80592615,
			80592622, 60478528, 60478529, 85819845, 231926881, 80592568,
			80592573, 80592574, 60478561, 319782720, 60478562, 60478564,
			231926896, 83798817, 418009708, 75868874, 75868871, 75868861,
			149034342, 21508559, 80592641, 21508568, 21508570, 21508572,
			21508574, 21508565, 80592662, 21508567, 21508591, 80592684,
			80592673, 80592677, 21508601, 21508600, 21508595, 21508594,
			21508593, 21508592, 21508599, 80592692, 21508597, 21508596,
			103649761, 116147131, 146909957, 146909962, 146909964, 146909975,
			181416613, 181416614, 181416616, 181416617, 94105066, 94105064,
			94105061, 94105060, 94105057, 94105056, 18348140, 18348141,
			18348137, 18348138, 18348139, 18348135, 87763660, 150431477,
			18348153, 18348155, 18348154, 18348148, 18348151, 18348147,
			18348146, 150431450, 175497626, 175497631, 175497629, 247948265,
			369661348, 159707069, 159707065, 150431657, 159654663, 159654664,
			85804018, 85804019, 165926391, 165926394, 66694203, 249394741,
			79238510, 147871881, 98925673, 60479565, 150430907, 150430909,
			150430908, 86615163, 86615161, 450874611, 20869970, 20869968,
			20869967, 20869964, 20869965, 20869963, 20869960, 20869959,
			20869956, 20869955, 20869953, 103686311, 60771004, 60771005,
			60771003, 157262545, 83797571, 116605218, 116605227, 180260745,
			249394516, 249394543, 249394544, 148446243, 203249842, 103686512,
			103686513, 103686514, 103686515, 103686516, 103686518, 103686511,
			86615357, 175512307, 176568220, 27225064, 60771271, 173247200,
			87763302, 60957721, 60957722, 173247195, 303977836, 303977838,
			101131954, 180241638, 247949234, 247949233, 249393999, 180241625,
			60957441, 160244788, 303977880, 303977879, 247949248, 450874367,
			249393886, 249393885, 249393884, 160260372, 60957408, 229671869,
			229671870, 229671865, 150291815, 60802089, 60802090, 60802091,
			60802092, 176566689, 160435208, 160435214, 160245018, 83796665,
			176566905, 160260697, 180241961, 180241975, 94609180, 94609181,
			94609178, 94609179, 94609177, 94609174, 94609175, 94609170,
			94609164, 94609163, 74854954, 94609162, 74854952, 74854953,
			74854951, 74854949, 176567010, 103668962, 455459524, 159705596,
			455459522, 455459523, 455459521, 103687538, 159670699, 27225920,
			27225921, 27225922, 27225924, 27225925, 147873317, 159705088,
			16393773, 27225919, 27225918, 552387105, 27226099, 27226097,
			27226102, 27226100, 27226101, 86614484, 86614476, 86614474,
			86614502, 86614503, 86614497, 86614499 };
}